/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * MantSeccion.java
 *
 * Created on 12/09/2011, 03:51:58 PM
 */

package GUI.AdministracionPlantillas;

import BE.Enunciado;
import BE.PlantillaMarcoReferencia;
import BE.PlantillaPapelTrabajo;
import BE.Seccion;
import BL.EnunciadoBl;
import BL.SeccionBl;
import DAO.PlantillaMarcoReferenciaDao;
import GUI.AdministracionProyectos.LlenadoEnunciado;
import GUI.AdministracionUsuarios.UtilUsuarios;
import GUI.Principal;
import java.awt.Dialog.ModalExclusionType;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Set;
import java.util.Vector;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;

/**
 *
 * @author CarLita
 */
public class MantSeccion extends javax.swing.JFrame {
    int modoVentana;
    PlantillaPapelTrabajo papelTrabajo;
    PlantillaMarcoReferencia marcoReferencia;
    Principal ventanaPrincipal;
    //PlantillaMarcoReferenciaDao marcoReferenciaDao;
    Seccion seccion;
    List<Seccion> seccionesLevel1;   
    Seccion seccionNivel1;
    List<Seccion> seccionesLevel2;
    Seccion seccionNivel2;
    SeccionBl seccionBl;
    EnunciadoBl enunciadoBl;
    
    /** Creates new form MantSeccion */

    public MantSeccion(PlantillaPapelTrabajo papelTrabajo, Principal ventanaPrincipal) {
        this.papelTrabajo = papelTrabajo;
        System.out.println("Papel de trabajo recibido: "+ papelTrabajo.getIdPlantillaPt()+"-"+ papelTrabajo.getNombre());
        initComponents();
        this.ventanaPrincipal = ventanaPrincipal;
        ocultarIdTabla();
//        solo1Nivel();
        lblPapelTrabajo.setText(papelTrabajo.getNombre());        
        seccionBl = new SeccionBl();
        enunciadoBl = new EnunciadoBl();
        llenarComboNivel1();            
//        buscarEnunciados();
        setearModo(Principal.MODO_CREACION);
        bloquearPorPermisos();
    }

    public MantSeccion(PlantillaPapelTrabajo papelTrabajo, Seccion seccion, int modo, Principal ventanaPrincipal) {
        seccionesLevel1 = new ArrayList<Seccion>();
        seccionesLevel2 = new ArrayList<Seccion>();                           
        this.ventanaPrincipal = ventanaPrincipal;
        this.seccion = seccion;
        this.papelTrabajo= papelTrabajo;
        initComponents();
        lblPapelTrabajo.setText(papelTrabajo.getNombre());
        lblCorrelativo.setText(""+seccion.getCorrelativo());
        ocultarIdTabla();
        modoVentana = modo;
        setearModo(modo);        
        seccionBl = new SeccionBl();
        enunciadoBl = new EnunciadoBl();
        buscarEnunciados();
        llenarComboNivel1();             
    }

    public void setearModo(int modo){
        switch(modo){
            case Principal.MODO_CREACION:
                btnEditar.setVisible(false);
                btnGuardar.setVisible(true);
                btnLimpiar.setVisible(true);
                cmbNivel1.setSelectedIndex(-1);
                cmbNivel2.setSelectedIndex(-1);
                bloquearPestaña(true);
//                solo1Nivel();
                break;
            case Principal.MODO_LECTURA:
                
                btnEditar.setVisible(true);
                btnGuardar.setVisible(false);
                btnLimpiar.setVisible(false);
                bloquearPestaña(false);
                llenarInformacionSeccion();
                bloquearCampos(true);
  //              solo1Nivel();
                break;
            case Principal.MODO_EDICION:
                btnEditar.setVisible(false);
                btnGuardar.setVisible(true);
                btnLimpiar.setVisible(false);
                bloquearPestaña(false);
                llenarInformacionSeccion();
                bloquearCampos(false);
//                solo1Nivel();
                break;
            case Principal.MODO_LLENADO:
                btnEditar.setVisible(false);
                btnGuardar.setVisible(true);
                btnLimpiar.setVisible(false);
                llenarInformacionSeccion();
                bloquearCampos(false);
                btnAgregarEnunciado.setIcon(new javax.swing.ImageIcon(getClass().getResource("/GUI/AdministracionProyectos/llenar doc.png"))); // NOI18N
                btnAgregarEnunciado.setText("Completar");
                btnEditarEnunciado.setText("Agregar");
                btnEditarEnunciado.setIcon(new javax.swing.ImageIcon(getClass().getResource("/GUI/AdministracionProyectos/agregar.png")));
//                solo1Nivel();
                break;
        }

    }

    private void llenarInformacionSeccion() {
        txtTitulo.setText(seccion.getTitulo());
        txtDescripcion.setText(seccion.getDescripcion());
    }

    private void bloquearCampos(boolean bloquear){
        boolean desbloqueado = !bloquear;
        btnAgregarEnunciado.setEnabled(desbloqueado);
        btnEditarEnunciado.setEnabled(desbloqueado);
        btnEliminarEnunciado.setEnabled(desbloqueado);
    }
   
    
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jButton5 = new javax.swing.JButton();
        tabSecciones = new javax.swing.JTabbedPane();
        jPanel1 = new javax.swing.JPanel();
        txtTitulo = new javax.swing.JTextField();
        jLabel12 = new javax.swing.JLabel();
        lblNivel1 = new javax.swing.JLabel();
        lblNivel2 = new javax.swing.JLabel();
        jScrollPane1 = new javax.swing.JScrollPane();
        txtDescripcion = new javax.swing.JTextArea();
        jLabel14 = new javax.swing.JLabel();
        cmbNivel1 = new javax.swing.JComboBox();
        cmbNivel2 = new javax.swing.JComboBox();
        btnGuardar = new javax.swing.JButton();
        btnLimpiar = new javax.swing.JButton();
        btnCancelar = new javax.swing.JButton();
        jLabel13 = new javax.swing.JLabel();
        lblCorrelativo = new javax.swing.JLabel();
        btnEditar = new javax.swing.JButton();
        jLabel1 = new javax.swing.JLabel();
        lblPapelTrabajo = new javax.swing.JLabel();
        jPanel2 = new javax.swing.JPanel();
        jPanel4 = new javax.swing.JPanel();
        jScrollPane2 = new javax.swing.JScrollPane();
        tblEnunciados = new javax.swing.JTable();
        btnAgregarEnunciado = new javax.swing.JButton();
        btnEditarEnunciado = new javax.swing.JButton();
        btnEliminarEnunciado = new javax.swing.JButton();
        btnRefrescar = new javax.swing.JButton();
        jLabel4 = new javax.swing.JLabel();

        jButton5.setIcon(new javax.swing.ImageIcon(getClass().getResource("/GUI/AdministracionPlantillas/edit.gif"))); // NOI18N
        jButton5.setText("Modificar");

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);

        jPanel1.setBorder(javax.swing.BorderFactory.createEtchedBorder());

        jLabel12.setText("Nombre:");

        lblNivel1.setText("Nivel 1:");

        lblNivel2.setText("Nivel 2:");

        txtDescripcion.setColumns(20);
        txtDescripcion.setFont(new java.awt.Font("Tahoma", 0, 11));
        txtDescripcion.setRows(5);
        jScrollPane1.setViewportView(txtDescripcion);

        jLabel14.setText("Descripción:");

        cmbNivel1.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "-" }));
        cmbNivel1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cmbNivel1ActionPerformed(evt);
            }
        });

        cmbNivel2.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "-" }));
        cmbNivel2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cmbNivel2ActionPerformed(evt);
            }
        });

        btnGuardar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/GUI/AdministracionPlantillas/guardar.png"))); // NOI18N
        btnGuardar.setText("Guardar");
        btnGuardar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnGuardarActionPerformed(evt);
            }
        });

        btnLimpiar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/GUI/AdministracionPlantillas/limpiar.png"))); // NOI18N
        btnLimpiar.setText("Limpiar");
        btnLimpiar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnLimpiarActionPerformed(evt);
            }
        });

        btnCancelar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/GUI/AdministracionPlantillas/cancelar.png"))); // NOI18N
        btnCancelar.setText("Cancelar");
        btnCancelar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnCancelarActionPerformed(evt);
            }
        });

        jLabel13.setText("Correlativo:");

        lblCorrelativo.setText("<por generar>");

        btnEditar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/GUI/AdministracionPlantillas/edit.gif"))); // NOI18N
        btnEditar.setText("Editar");
        btnEditar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnEditarActionPerformed(evt);
            }
        });

        jLabel1.setText("Papel de Trabajo: ");

        lblPapelTrabajo.setText("<papel de trabajo>");

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
                .addContainerGap(76, Short.MAX_VALUE)
                .addComponent(btnEditar, javax.swing.GroupLayout.PREFERRED_SIZE, 123, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addComponent(btnGuardar, javax.swing.GroupLayout.PREFERRED_SIZE, 123, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addComponent(btnLimpiar, javax.swing.GroupLayout.PREFERRED_SIZE, 123, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addComponent(btnCancelar, javax.swing.GroupLayout.PREFERRED_SIZE, 123, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(39, 39, 39))
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addGap(139, 139, 139)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(jPanel1Layout.createSequentialGroup()
                        .addComponent(jLabel13, javax.swing.GroupLayout.PREFERRED_SIZE, 89, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(lblCorrelativo, javax.swing.GroupLayout.PREFERRED_SIZE, 89, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 217, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(jPanel1Layout.createSequentialGroup()
                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(jPanel1Layout.createSequentialGroup()
                                .addGap(27, 27, 27)
                                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                                    .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                        .addComponent(jLabel12, javax.swing.GroupLayout.PREFERRED_SIZE, 55, javax.swing.GroupLayout.PREFERRED_SIZE)
                                        .addComponent(jLabel1))
                                    .addGroup(jPanel1Layout.createSequentialGroup()
                                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                            .addComponent(lblNivel2, javax.swing.GroupLayout.PREFERRED_SIZE, 52, javax.swing.GroupLayout.PREFERRED_SIZE)
                                            .addComponent(lblNivel1, javax.swing.GroupLayout.PREFERRED_SIZE, 68, javax.swing.GroupLayout.PREFERRED_SIZE))
                                        .addGap(18, 18, 18))))
                            .addComponent(jLabel14))
                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 286, Short.MAX_VALUE)
                            .addComponent(cmbNivel2, 0, 286, Short.MAX_VALUE)
                            .addComponent(cmbNivel1, 0, 286, Short.MAX_VALUE)
                            .addComponent(txtTitulo, javax.swing.GroupLayout.PREFERRED_SIZE, 286, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(lblPapelTrabajo))))
                .addGap(121, 121, 121))
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
                .addContainerGap(18, Short.MAX_VALUE)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(lblPapelTrabajo)
                    .addComponent(jLabel1))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(txtTitulo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel12))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(cmbNivel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(lblNivel1, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(cmbNivel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(lblNivel2))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 114, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel14))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel13)
                    .addComponent(lblCorrelativo))
                .addGap(18, 18, 18)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(btnLimpiar)
                    .addComponent(btnGuardar)
                    .addComponent(btnCancelar)
                    .addComponent(btnEditar))
                .addContainerGap())
        );

        tabSecciones.addTab("Datos Generales", jPanel1);

        jPanel4.setBorder(javax.swing.BorderFactory.createEtchedBorder());

        tblEnunciados.setModel(new DefaultTableModel(
            new Object [][] {},
            new String [] {
                "Id", "Correlativo", "Enunciado"
            }));
            tblEnunciados.addMouseListener(new java.awt.event.MouseAdapter() {
                public void mousePressed(java.awt.event.MouseEvent evt) {
                    tblEnunciadosMousePressed(evt);
                }
            });
            jScrollPane2.setViewportView(tblEnunciados);

            btnAgregarEnunciado.setIcon(new javax.swing.ImageIcon(getClass().getResource("/GUI/AdministracionPlantillas/new doc.png"))); // NOI18N
            btnAgregarEnunciado.setText("Agregar");
            btnAgregarEnunciado.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
            btnAgregarEnunciado.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
            btnAgregarEnunciado.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent evt) {
                    btnAgregarEnunciadoActionPerformed(evt);
                }
            });

            btnEditarEnunciado.setIcon(new javax.swing.ImageIcon(getClass().getResource("/GUI/AdministracionPlantillas/edit.gif"))); // NOI18N
            btnEditarEnunciado.setText("Editar");
            btnEditarEnunciado.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent evt) {
                    btnEditarEnunciadoActionPerformed(evt);
                }
            });

            btnEliminarEnunciado.setIcon(new javax.swing.ImageIcon(getClass().getResource("/GUI/AdministracionPlantillas/minus white.png"))); // NOI18N
            btnEliminarEnunciado.setText("Eliminar");
            btnEliminarEnunciado.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent evt) {
                    btnEliminarEnunciadoActionPerformed(evt);
                }
            });

            btnRefrescar.setText("Refrescar");
            btnRefrescar.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent evt) {
                    btnRefrescarActionPerformed(evt);
                }
            });

            javax.swing.GroupLayout jPanel4Layout = new javax.swing.GroupLayout(jPanel4);
            jPanel4.setLayout(jPanel4Layout);
            jPanel4Layout.setHorizontalGroup(
                jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(jPanel4Layout.createSequentialGroup()
                    .addContainerGap()
                    .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 488, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addGap(18, 18, 18)
                    .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addComponent(btnRefrescar, javax.swing.GroupLayout.DEFAULT_SIZE, 93, Short.MAX_VALUE)
                        .addComponent(btnEliminarEnunciado, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(btnEditarEnunciado, javax.swing.GroupLayout.DEFAULT_SIZE, 93, Short.MAX_VALUE)
                        .addComponent(btnAgregarEnunciado, javax.swing.GroupLayout.DEFAULT_SIZE, 93, Short.MAX_VALUE))
                    .addGap(32, 32, 32))
            );
            jPanel4Layout.setVerticalGroup(
                jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(jPanel4Layout.createSequentialGroup()
                    .addContainerGap()
                    .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 303, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGroup(jPanel4Layout.createSequentialGroup()
                            .addComponent(btnAgregarEnunciado, javax.swing.GroupLayout.PREFERRED_SIZE, 73, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                            .addComponent(btnEditarEnunciado)
                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                            .addComponent(btnEliminarEnunciado)
                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                            .addComponent(btnRefrescar)))
                    .addContainerGap(22, Short.MAX_VALUE))
            );

            javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
            jPanel2.setLayout(jPanel2Layout);
            jPanel2Layout.setHorizontalGroup(
                jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup()
                    .addGap(19, 19, 19)
                    .addComponent(jPanel4, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addContainerGap())
            );
            jPanel2Layout.setVerticalGroup(
                jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(jPanel2Layout.createSequentialGroup()
                    .addContainerGap()
                    .addComponent(jPanel4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
            );

            tabSecciones.addTab("Enunciados", jPanel2);

            jLabel4.setFont(new java.awt.Font("Verdana", 0, 24));
            jLabel4.setIcon(new javax.swing.ImageIcon(getClass().getResource("/GUI/imagenes/lista-de-regalos.png"))); // NOI18N
            jLabel4.setText("Sección");

            javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
            getContentPane().setLayout(layout);
            layout.setHorizontalGroup(
                layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addContainerGap()
                    .addComponent(jLabel4)
                    .addContainerGap(525, Short.MAX_VALUE))
                .addComponent(tabSecciones, javax.swing.GroupLayout.DEFAULT_SIZE, 670, Short.MAX_VALUE)
            );
            layout.setVerticalGroup(
                layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addContainerGap(11, Short.MAX_VALUE)
                    .addComponent(jLabel4)
                    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                    .addComponent(tabSecciones, javax.swing.GroupLayout.PREFERRED_SIZE, 368, javax.swing.GroupLayout.PREFERRED_SIZE))
            );

            pack();
        }// </editor-fold>//GEN-END:initComponents

    private void btnCancelarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnCancelarActionPerformed
        this.dispose();
    }//GEN-LAST:event_btnCancelarActionPerformed
    
    private void btnAgregarEnunciadoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnAgregarEnunciadoActionPerformed
        MantEnunciado v = new MantEnunciado(seccion, ventanaPrincipal);
        v.setVisible(true);
        v.setModalExclusionType(ModalExclusionType.NO_EXCLUDE);
    }//GEN-LAST:event_btnAgregarEnunciadoActionPerformed

    private void btnEditarEnunciadoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnEditarEnunciadoActionPerformed
        Enunciado e = getEnunciadoDeTabla();
        new MantEnunciado(e, Principal.MODO_EDICION, ventanaPrincipal).setVisible(true);
        buscarEnunciados();
    }//GEN-LAST:event_btnEditarEnunciadoActionPerformed

    private void btnEditarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnEditarActionPerformed
        setearModo(Principal.MODO_EDICION);
        btnEditar.setEnabled(false);
        buscarEnunciados();
    }//GEN-LAST:event_btnEditarActionPerformed

    private void ocultarIdTabla() {
        tblEnunciados.getColumn("Id").setWidth(0);
        tblEnunciados.getColumn("Id").setMinWidth(0);
        tblEnunciados.getColumn("Id").setMaxWidth(0);
    }

    private void btnLimpiarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnLimpiarActionPerformed
        limpiar();
    }//GEN-LAST:event_btnLimpiarActionPerformed

    private void btnGuardarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnGuardarActionPerformed
        guardar();
    }//GEN-LAST:event_btnGuardarActionPerformed

    private void btnEliminarEnunciadoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnEliminarEnunciadoActionPerformed
        eliminarEnunciado();
        buscarEnunciados();
    }//GEN-LAST:event_btnEliminarEnunciadoActionPerformed

private void cmbNivel1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cmbNivel1ActionPerformed
    if (cmbNivel1.getSelectedIndex()<1){
        llenarComboNivel2(false);
        seccionNivel1=new Seccion(-1);
    }
    else {        
        int index = cmbNivel1.getSelectedIndex()-1;
        seccionNivel1 = seccionesLevel1.get(index);
        llenarComboNivel2(true);
    }
}//GEN-LAST:event_cmbNivel1ActionPerformed

private void cmbNivel2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cmbNivel2ActionPerformed
    if (cmbNivel2.getSelectedIndex()>1){
        int index = cmbNivel2.getSelectedIndex()-1;
        seccionNivel2 = seccionesLevel2.get(index);
    }
    else {
        seccionNivel2=new Seccion(-1);
    }
}//GEN-LAST:event_cmbNivel2ActionPerformed

private void btnRefrescarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnRefrescarActionPerformed
    buscarEnunciados();
}//GEN-LAST:event_btnRefrescarActionPerformed

private void tblEnunciadosMousePressed(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_tblEnunciadosMousePressed
    if (evt.getClickCount()>1){
        lecturaEnunciados();
    }
}//GEN-LAST:event_tblEnunciadosMousePressed

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnAgregarEnunciado;
    private javax.swing.JButton btnCancelar;
    private javax.swing.JButton btnEditar;
    private javax.swing.JButton btnEditarEnunciado;
    private javax.swing.JButton btnEliminarEnunciado;
    private javax.swing.JButton btnGuardar;
    private javax.swing.JButton btnLimpiar;
    private javax.swing.JButton btnRefrescar;
    private javax.swing.JComboBox cmbNivel1;
    private javax.swing.JComboBox cmbNivel2;
    private javax.swing.JButton jButton5;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel12;
    private javax.swing.JLabel jLabel13;
    private javax.swing.JLabel jLabel14;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JPanel jPanel4;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JScrollPane jScrollPane2;
    private javax.swing.JLabel lblCorrelativo;
    private javax.swing.JLabel lblNivel1;
    private javax.swing.JLabel lblNivel2;
    private javax.swing.JLabel lblPapelTrabajo;
    private javax.swing.JTabbedPane tabSecciones;
    private javax.swing.JTable tblEnunciados;
    private javax.swing.JTextArea txtDescripcion;
    private javax.swing.JTextField txtTitulo;
    // End of variables declaration//GEN-END:variables

    private void guardar(){
        String mensajeError = validarCampos();
        if (mensajeError.isEmpty()) {
            if (grabarSeccion()>0){
                setearModo(Principal.MODO_EDICION);
                lblCorrelativo.setText(""+seccion.getCorrelativo());
                JOptionPane.showMessageDialog(this, "La seccion ha sido creada", "Confirmacion", JOptionPane.INFORMATION_MESSAGE);
            }
             else{
                JOptionPane.showMessageDialog(this, "Ha ocurrido un error en la creación. \nPor favor, intente nuevamente.", "Campos incompletos", JOptionPane.ERROR_MESSAGE);
             }
        }
        else {
            JOptionPane.showMessageDialog(this, mensajeError, "Campos incompletos", JOptionPane.ERROR_MESSAGE);
        }
    }
    
    private void limpiar() {
        txtTitulo.setText("");
        txtDescripcion.setText("");
        cmbNivel1.setSelectedIndex(0);
        cmbNivel2.setSelectedIndex(0);
        limpiarTabla();
    }

    private String validarCampos() {
        if (txtTitulo.getText().trim().isEmpty())
            return "Usted no ha ingresado el nombre de la sección. ";
        return "";
    }

    private int grabarSeccion() {
        seccion = new Seccion();
        seccion.setTitulo(txtTitulo.getText().trim());
        seccion.setDescripcion(txtDescripcion.getText().trim());
        marcoReferencia = getMarcoReferencia(papelTrabajo.getPlantillaMarcoReferencia().getIdPlantilla());
        seccion.setPlantillaMarcoReferencia(marcoReferencia);
        papelTrabajo.setPlantillaMarcoReferencia(marcoReferencia);
        seccion.setPlantillaPapelTrabajo(papelTrabajo);
        
        //superiores
       if (seccionNivel2!=null && seccionNivel2.getIdSeccion()!=-1) seccion.setNivelSeccion(3);
       else if (seccionNivel1!=null && seccionNivel1.getIdSeccion()!=-1) seccion.setNivelSeccion(2);
       else seccion.setNivelSeccion(1);
       
       seccion.setIdseccionSuperior1(seccionNivel1.getIdSeccion());
       seccion.setIdseccionSuperior2(seccionNivel2.getIdSeccion());
        
        int auxCorr = seccionNivel1.getIdSeccion()!=-1?seccionNivel1.getCorrelativo():0;
        seccion.setCorrelativoSuperior1(auxCorr);
        
        auxCorr = seccionNivel2.getIdSeccion()!=-1?seccionNivel2.getCorrelativo():0;
        seccion.setCorrelativoSuperior2(auxCorr);
        
        seccion.setCorrelativo(calcularCorrelativo());
        //System.out.println("Id marco de referencia: "+papelTrabajo.getPlantillaMarcoReferencia().getIdPlantilla());        
        int id =  seccionBl.grabar(seccion);        
        seccion.setIdSeccion(id);
        return id;

    }

    //private void getMarcoReferencia(papel)

    private void bloquearPestaña(boolean b) {
        tabSecciones.setEnabledAt(tabSecciones.getTabCount()-1, !b);
    }

    private PlantillaMarcoReferencia getMarcoReferencia(int idMarcoRef){
        return new PlantillaMarcoReferenciaDao().buscarPorId(idMarcoRef);
    }

    private Enunciado getEnunciadoDeTabla() {
        int idEnunciado = getIdSeleccionado();
        return enunciadoBl.buscarPorId(idEnunciado);
    }

    private int getIdSeleccionado(){
        return Integer.parseInt(tblEnunciados.getValueAt(tblEnunciados.getSelectedRow(), 0).toString());
    }

    private void eliminarEnunciado() {
        int idEnunciado = Integer.parseInt(tblEnunciados.getValueAt(tblEnunciados.getSelectedRow(), 0).toString());
        int opcion = JOptionPane.showConfirmDialog(this, "Desea eliminar el registro seleccionado?", "Confirmación", JOptionPane.YES_NO_OPTION);
        if (opcion == JOptionPane.YES_OPTION){
            boolean eliminado = enunciadoBl.eliminar(idEnunciado);
            if (eliminado){
                JOptionPane.showMessageDialog(this, "El enunciado seleccionado ha sido eliminado", "Confirmación", JOptionPane.INFORMATION_MESSAGE);
                buscarEnunciados();
            }
             else {
                JOptionPane.showMessageDialog(this, "Ha ocurrido un error en la eliminación.\nPor favor, intente nuevamente.", "Error", JOptionPane.ERROR_MESSAGE);
             }
        }
    }

    public void buscarEnunciados() {
        List enunciados = enunciadoBl.buscarPorSeccion(seccion.getIdSeccion());
        llenarTabla(enunciados);        
    }

    private void llenarTabla(List listaEnunciados){
        Vector<String> tableHeaders = new Vector<String>();
        Vector tableData = new Vector();
        tableHeaders.add("Id");
        tableHeaders.add("Correlativo");//"Id", "Correlativo", "Enunciado"
        tableHeaders.add("Enunciado");

        for(Object o : listaEnunciados) {
            Enunciado enunciado = (Enunciado)o;
            Vector<Object> fila = new Vector<Object>();
            fila.add(enunciado.getIdEnunciado());
            fila.add(enunciado.getCorrelativo());
            fila.add(enunciado.getEnunciado());
            tableData.add(fila);
        }

        tblEnunciados.setModel(new DefaultTableModel(tableData, tableHeaders));
        ocultarIdTabla();
    }

    private void limpiarTabla() {
        tblEnunciados.setModel(new DefaultTableModel(
            new Object [][] {
                {null, null, null, null},
                {null, null, null, null}},
            new String [] {
                "Id", "Correlativo", "Enunciado"
        }));
        ocultarIdTabla();
    }

    private void llenarComboNivel1() {        
        seccionesLevel1 = seccionBl.buscarNivelesPorPlantilla(papelTrabajo.getIdPlantillaPt(),1,0);
        llenarCombo(1);
    }
    
    private void llenarComboNivel2(boolean llenar) {
        if (llenar){
            seccionesLevel2 = seccionBl.buscarNivelesPorPlantilla(papelTrabajo.getIdPlantillaPt(),2,seccionNivel1.getIdSeccion());
            llenarCombo(2);            
        }
        else {
            seccionesLevel2 = new ArrayList<Seccion>();
            llenarCombo(2);
        }
    }

    private void llenarCombo(int nivel) {
        switch(nivel){
            case 1:
                for (Seccion s: seccionesLevel1){
                    cmbNivel1.addItem(s.getTitulo());
                }
                break;
            case 2:
                cmbNivel2.removeAllItems();
                cmbNivel2.addItem("-");
                for (Seccion s: seccionesLevel2){
                    cmbNivel2.addItem(s.getTitulo());
                }
                break;
        }
    }
    

    private int calcularCorrelativo() {
        if (seccionNivel2!=null && seccionNivel2.getIdSeccion()!=-1){
            List corr = seccionBl.buscarNivelesPorPlantilla(papelTrabajo.getIdPlantillaPt(), 3, seccionNivel2.getIdSeccion());
            return corr.size()+1;
        }
        if (seccionNivel1!=null && seccionNivel1.getIdSeccion()!=-1){
            List corr = seccionBl.buscarNivelesPorPlantilla(papelTrabajo.getIdPlantillaPt(), 2, seccionNivel1.getIdSeccion());
            return corr.size()+1;
        }
        List corr = seccionBl.buscarNivelesPorPlantilla(papelTrabajo.getIdPlantillaPt(),1,-1);
        return corr.size()+1;
    }


    private void lecturaEnunciados() {
        Enunciado e = getEnunciadoDeTabla();
        new MantEnunciado(e, Principal.MODO_LECTURA, ventanaPrincipal).setVisible(true);
        buscarEnunciados();
    }

    private void bloquearPorPermisos() {
          if (ventanaPrincipal.getPermisos().getPermisoPapel().indexOf(UtilUsuarios.VER)>-1)
        {
            btnEditar.setVisible(false);
            btnEditar.setEnabled(false);
            btnAgregarEnunciado.setEnabled(false);
            btnAgregarEnunciado.setVisible(false);
            btnEditarEnunciado.setEnabled(false);
            btnEditarEnunciado.setVisible(false);
            btnEliminarEnunciado.setEnabled(false);
            btnEliminarEnunciado.setVisible(false);
        }        
        if (ventanaPrincipal.getPermisos().getPermisoPapel().indexOf(UtilUsuarios.CREAR)>-1)
        {
            btnEditar.setVisible(false);
            btnEditar.setEnabled(false);
            btnAgregarEnunciado.setEnabled(true);
            btnAgregarEnunciado.setVisible(true);
            btnEditarEnunciado.setEnabled(true);
            btnEditarEnunciado.setVisible(true);
            btnEliminarEnunciado.setEnabled(true);
            btnEliminarEnunciado.setVisible(true);
               
        }                
        if (ventanaPrincipal.getPermisos().getPermisoPapel().indexOf(UtilUsuarios.EDITAR)>-1)
        {
            btnEditar.setVisible(true);
            btnEditar.setEnabled(true);
            btnAgregarEnunciado.setEnabled(true);
            btnAgregarEnunciado.setVisible(true);
            btnEditarEnunciado.setEnabled(true);
            btnEditarEnunciado.setVisible(true);
            btnEliminarEnunciado.setEnabled(true);
            btnEliminarEnunciado.setVisible(true);
        }
    }


}
